# 创建序列化器
from rest_framework import serializers
from django_redis import get_redis_connection
import logging
# 创建记录器实例
logger = logging.getLogger('meiduo')


class RegisterSmsCodeSerializer(serializers.Serializer):
    text = serializers.CharField(label='图片验证码',max_length=4,min_length=4,write_only=True)
    image_code_id = serializers.UUIDField(label='UUID')
    # 反序列化验证四种方式：
    # 字段类型，字段选项，validate_<fieldsname>(单个字段验证)，validate(多个字段验证）
    def validate(self, attrs):
        """
        1.获取传过来的参数data,接收数据
        2.获取redis中的验证码
        3.判断验证码是否存在:如果存在还需要删除，释放内存
        4.判断是否相等
        5.返回数据attrs
        :param attrs:
        :return:
        """
        # 1.获取传过来的参数data,接收数据
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        # 2.获取redis中的验证码
        # 连接redis
        redis_coon = get_redis_connection('code')
        redis_text = redis_coon.get('img_%s'%image_code_id)


        # 3.判断验证码是否存在:如果存在还需要删除，释放内存
        if redis_text is None:
            raise serializers.ValidationError('验证码已过期')
        # 删除redis中的数据，释放内存
        try:
            redis_coon.delete('img_%s'%image_code_id)
        except Exception as e:
            logger.error(e)
        # 4.判断是否相等
        if redis_text.decode().lower()!=text.lower():
            raise serializers.ValidationError('验证码错误')
        return attrs


        # 5.返回数据attrs


